package com.itheima.web;

import com.itheima.result.R;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.UUID;

@RestController
@RequestMapping("/common")
public class CommonController {
    @Value("${download}")
    private String a;

    @PostMapping("/upload")
    //这里的参数名要是，照片定义的name一致，默认的是file
    public R upload(MultipartFile file) throws IOException {
        //获取传过来的文件，照片命称
        String name = file.getOriginalFilename();
        System.out.println(name);
        //将获取的照片名，进行切割，获取照片民后面的照片种类
        String s = name.substring(name.lastIndexOf("."));
        /*String[] s = name.split("\\.");
        String s1 = s[s.length-1];*/
        //为了避免出现照片名重复，会出现覆盖现象，使用uuid生成照片名的前缀
        String string = UUID.randomUUID().toString().replace("-","");
        //将uuid生成的文件前缀名与，切割的照片类型进行拼接
        String newName = string + s;
        //创建文件对象，对存储地址进行判断避免出现没有创建文件夹的情况，没有文件夹则使用文件对象创建
        File f = new File(a);
        //判断文件是否存在如果不存在就创建文件夹
        if (!f.exists()){
            f.mkdirs();
        }
        //文件保存的具体地址
        File newF = new File(f,newName);
        System.out.println(newF);
        //把文件保存的固定的地址
        file.transferTo(newF);

        //返回照片名称方便，下载回显
        return R.success(newName);
    }

    @GetMapping("/download")
    public void getOut(String name, HttpServletResponse resp) throws Exception {
        //创建一个byte数组
        byte [] aa = new byte[1024];
        String s = "/" + name;
        //创建一个字节输入流,传入照片存储的位置，读取照片
        FileInputStream  is = new FileInputStream(a + s);
        //创建一个旗帜变量，记录读取了多少个字节
        int len = 0;
        //使用循环遍历的方方式读取照片
        while ((len = is.read(aa))!= -1) {
            resp.getOutputStream().write(aa,0,len);
        }


    }
}
